<?php

namespace App\Http\Controllers\Landscaping;

use App\Models\Landscaping\TaskCategory;
use Illuminate\Database\QueryException;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

/**
 * @group 任务管理->任务类型
 *
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */

class TaskCategoryController extends Controller
{
    /**
     * 任务类型列表---分页
     *
     * @queryParam name string 任务类型名称
     * @queryParam parent_id int 父级id
     * @queryParam sort int 排序
     *
     */
    public function index(Request $request)
    {
        $taskCategory = new TaskCategory();
        $data = $taskCategory->getList($request);
        return response()->json(encodeMsg($data,200));
    }

    /**
     * 任务类型列表---不分页 (参数二选一)
     *
     * @bodyParam id int 任务类型id 获取组织及其下级任务类型
     * @bodyParam parent_id int 任务类型父ID 获取任务类型下的所有任务类型
     *
     * @queryParam name string 任务类型名称
     * @queryParam parent_id int 父级id
     * @queryParam sort int 排序
     *
     */
    public function getAll(Request $request)
    {
        $data = TaskCategory::orderBy('id','desc')->get();
        $id = $request->input('id','');
        $parent_id = $request->input('parent_id',0);
        $data = generateTree($data,$parent_id);
        $list = [];
        //循环任务类型及其下级任务类型
        if(is_numeric($id)) {
            foreach ($data as $key => $value) {
                if($value['id'] == $id) {
                    $list[] = $value;
                }
            }
        } else {
            $list[] = $data;
        }
        return response()->json(encodeMsg($list,200));
    }

    /**
     * 新增任务类型
     *
     * @bodyParam name string required 任务类型名称
     * @bodyParam parent_id int 父级id
     * @bodyParam sort int 排序
     *
     * @queryParam name string 任务类型名称
     * @queryParam parent_id int 父级id
     * @queryParam sort int 排序
     */
    public function store(Request $request)
    {
        try {
            $data = TaskCategory::create($request->all());
            return response()->json(encodeMsg($data,201));
        } catch (QueryException $e) {
            return response()->json(encodeMsg(['message' => '任务类型添加失败!'],400));
        }
    }

    /**
     * 查看任务类型
     *
     * @bodyParam id int required 任务类型ID
     *
     * @queryParam name string 任务类型名称
     * @queryParam parent_id int 父级id
     * @queryParam sort int 排序
     *
     */
    public function show($id)
    {
        // 创建模型
        $data = TaskCategory::find($id);
        if($data == []) {
            return response()->json(encodeMsg(["message" => "没有该任务类型!"], 404));
        }
        return response()->json(encodeMsg($data,200));
    }

    /**
     * 修改任务类型
     *
     * @bodyParam  id  int 任务类型ID
     * @bodyParam name string required 任务类型名称
     * @bodyParam parent_id int 父级id
     * @bodyParam sort int 排序
     *
     * @queryParam name string 任务类型名称
     * @queryParam parent_id int 父级id
     * @queryParam sort int 排序
     *
     */
    public function update(Request $request,$id)
    {
        // 创建模型
        $taskCategory = TaskCategory::find($id);
        if($taskCategory == []) {
            return response()->json(encodeMsg(["message" => "没有该任务类型!"], 404));
        }
        try {
            $taskCategory->update($request->all());
            return response()->json(encodeMsg($taskCategory,200));
        } catch (QueryException $e) {
            return response()->json(encodeMsg(['message' => '任务类型修改失败!'],400));
        }
    }

    /**
     * 删除任务类型
     *
     * @bodyParam id int required required 任务类型ID
     * @response 204 {
     *   "message": "删除成功"
     * }
     *
     *
     * @response 404 {
     *  "message": "没有该任务类型"
     * }
     */
    public function destroy($id)
    {
        // 创建模型
        $taskCategory = TaskCategory::find($id);
        if($taskCategory == []) {
            return response()->json(encodeMsg(["message" => "没有该任务类型!"], 404));
        }
        if($taskCategory->delete()) {
            return response()->json(encodeMsg(["message" => "删除成功!"], 204));
        } else {
            return response()->json(encodeMsg(["message" => "删除失败!"], 400));
        }
    }

    /**
     * 批量删除任务类型
     *
     * @bodyParam ids integer required id集合字符串[格式：ids=1,2,3]
     * @response 204 {
     *   "message": "任务类型删除成功"
     * }
     *
     *
     */
    public function delete($ids)
    {
        $listId = explode(',', $ids);
        TaskCategory::whereIn('id',$listId)->delete();
        return response()->json(encodeMsg(["message" => "任务类型删除成功!"], 204));
    }
}
